home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / fish / 676-700 / 681 / term / source.lha / DatePanel.c < prev    next >
C/C++ Source or Header  |  1992-05-09  |  6KB  |  253 lines

  1. /*
  2. **    $Id: DatePanel.c,v 1.5 92/05/01 12:52:09 olsen Sta Locker: olsen $
  3. **    $Revision: 1.5 $
  4. **    $Date: 92/05/01 12:52:09 $
  5. **
  6. **    Editing panel for date selection
  7. **
  8. **    Copyright © 1990-1992 by Olaf `Olsen' Barthel & MXM
  9. **        All Rights Reserved
  10. */
  11.  
  12. #include "termGlobal.h"
  13.  
  14. enum    {    GAD_MONTH,GAD_DAY,GAD_COMMENT,GAD_USE,GAD_CANCEL };
  15.  
  16. #define WIDTH    329
  17. #define HEIGHT    75
  18.  
  19. STATIC UBYTE * __saveds
  20. ShowMonth(struct Gadget *SomeGadget,WORD Level)
  21. {
  22.     return(LocaleString(Level + MSG_DATEPANEL_JANUARY_TXT));
  23. }
  24.  
  25. STATIC struct Gadget *
  26. CreateAllGadgets(struct TimeDate *TimeDate,struct Gadget **GadgetArray,struct Gadget **GadgetList,APTR VisualInfo,UWORD TopEdge)
  27. {
  28.     struct Gadget        *Gadget;
  29.     struct NewGadget     NewGadget;
  30.     UWORD             Counter = 0;
  31.  
  32.     memset(&NewGadget,0,sizeof(struct NewGadget));
  33.  
  34.     if(Gadget = CreateContext(GadgetList))
  35.     {
  36.         NewGadget . ng_LeftEdge        = 138;
  37.         NewGadget . ng_TopEdge        = 12;
  38.         NewGadget . ng_Width        = 181;
  39.         NewGadget . ng_Height        = 14;
  40.         NewGadget . ng_GadgetText    = LocaleString(MSG_DATEPANEL_MONTH_GAD);
  41.         NewGadget . ng_TextAttr        = &DefaultFont;
  42.         NewGadget . ng_GadgetID        = Counter;
  43.         NewGadget . ng_Flags        = PLACETEXT_LEFT|NG_HIGHLABEL;
  44.         NewGadget . ng_VisualInfo    = VisualInfo;
  45.  
  46.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  47.             GT_Underscore,        '_',
  48.             GTSL_Level,        TimeDate -> Month,
  49.             GTSL_Max,        11,
  50.             GTSL_MaxLevelLen,    9,
  51.             GTSL_LevelFormat,    "%s",
  52.             GTSL_DispFunc,        ShowMonth,
  53.             PGA_Freedom,        LORIENT_HORIZ,
  54.             GA_Immediate,        TRUE,
  55.             GA_RelVerify,        TRUE,
  56.         TAG_DONE);
  57.  
  58.         NewGadget . ng_TopEdge        = 27;
  59.         NewGadget . ng_GadgetText    = LocaleString(MSG_DATEPANEL_DAY_GAD);
  60.         NewGadget . ng_GadgetID        = Counter;
  61.  
  62.         GadgetArray[Counter++] = Gadget = CreateGadget(SLIDER_KIND,Gadget,&NewGadget,
  63.             GT_Underscore,        '_',
  64.             GTSL_Level,        TimeDate -> Day,
  65.             GTSL_Min,        1,
  66.             GTSL_Max,        31,
  67.             GTSL_MaxLevelLen,    2,
  68.             GTSL_LevelFormat,    "%2ld",
  69.             PGA_Freedom,        LORIENT_HORIZ,
  70.             GA_Immediate,        TRUE,
  71.             GA_RelVerify,        TRUE,
  72.         TAG_DONE);
  73.  
  74.         NewGadget . ng_TopEdge        = 42;
  75.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_COMMENT_GAD);
  76.         NewGadget . ng_GadgetID        = Counter;
  77.  
  78.         GadgetArray[Counter++] = Gadget = CreateGadget(STRING_KIND,Gadget,&NewGadget,
  79.             GT_Underscore,    '_',
  80.             GTST_MaxChars,    19,
  81.             GTST_EditHook,    &CommandHook,
  82.             GTST_String,    TimeDate -> Comment,
  83.             GA_Immediate,    TRUE,
  84.         TAG_DONE);
  85.  
  86.         NewGadget . ng_LeftEdge        = 10;
  87.         NewGadget . ng_TopEdge        = 60;
  88.         NewGadget . ng_Width        = 88;    /* NEW 52 */
  89.         NewGadget . ng_Height        = 12;
  90.         NewGadget . ng_Flags        = 0;
  91.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_USE_GAD);
  92.         NewGadget . ng_GadgetID        = Counter;
  93.         NewGadget . ng_Flags        = PLACETEXT_IN;
  94.  
  95.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  96.             GT_Underscore,    '_',
  97.         TAG_DONE);
  98.  
  99.         NewGadget . ng_LeftEdge        = WIDTH - 10 - NewGadget . ng_Width;
  100.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_CANCEL_GAD);
  101.         NewGadget . ng_GadgetID        = Counter;
  102.  
  103.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  104.             GT_Underscore,    '_',
  105.         TAG_DONE);
  106.     }
  107.  
  108.     return(Gadget);
  109. }
  110.  
  111. BYTE
  112. DatePanel(struct TimeDate *TimeDate)
  113. {
  114.     STATIC BYTE MaxDays[12] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
  115.  
  116.     struct Window    *PanelWindow;
  117.     struct Gadget    *GadgetList;
  118.     struct Gadget    *GadgetArray[GAD_CANCEL + 1];
  119.     BYTE         Result = FALSE;
  120.     struct TimeDate     LocalTimeDate;
  121.  
  122.     LocalTimeDate = *TimeDate;
  123.  
  124.     if(CreateAllGadgets(TimeDate,&GadgetArray[0],&GadgetList,VisualInfo,Screen -> WBorTop + Screen -> Font -> ta_YSize + 1))
  125.     {
  126.         if(PanelWindow = OpenWindowTags(NULL,
  127.             WA_Left,    (Screen -> Width - WIDTH) >> 1,
  128.             WA_Top,        (Screen -> Height - HEIGHT) >> 1,
  129.             WA_Width,    WIDTH,
  130.             WA_Height,    HEIGHT,
  131.             WA_Activate,    TRUE,
  132.             WA_DragBar,    TRUE,
  133.             WA_DepthGadget,    TRUE,
  134.             WA_RMBTrap,    TRUE,
  135.             WA_DepthGadget,    TRUE,
  136.             WA_CloseGadget,    TRUE,
  137.             WA_CustomScreen,Screen,
  138.             WA_IDCMP,    IDCMP_CLOSEWINDOW | IDCMP_VANILLAKEY | IDCMP_GADGETDOWN | BUTTONIDCMP | SLIDERIDCMP,
  139.             WA_Title,    LocaleString(MSG_DATEPANEL_DATE_SETTINGS_TXT),
  140.         TAG_DONE))
  141.         {
  142.             struct IntuiMessage    *Massage;
  143.             ULONG             Class,Code;
  144.             struct Gadget        *Gadget;
  145.             BYTE             Terminated = FALSE;
  146.  
  147.             PushWindow(PanelWindow);
  148.  
  149.             AddGList(PanelWindow,GadgetList,(UWORD)-1,(UWORD)-1,NULL);
  150.             RefreshGList(GadgetList,PanelWindow,NULL,(UWORD)-1);
  151.             GT_RefreshWindow(PanelWindow,NULL);
  152.  
  153.             ActiveGadget = NULL;
  154.  
  155.             while(!Terminated)
  156.             {
  157.                 WaitPort(PanelWindow -> UserPort);
  158.  
  159.                 while(!Terminated && (Massage = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort)))
  160.                 {
  161.                     Class    = Massage -> Class;
  162.                     Code    = Massage -> Code;
  163.                     Gadget    = (struct Gadget *)Massage -> IAddress;
  164.  
  165.                     GT_ReplyIMsg(Massage);
  166.  
  167.                     if(Class == IDCMP_VANILLAKEY)
  168.                         KeySelect(GadgetArray,GAD_CANCEL,Code,PanelWindow,&Gadget,&Class,&Code);
  169.  
  170.                     if(Class == IDCMP_GADGETDOWN)
  171.                     {
  172.                         if((Gadget -> GadgetType & GTYP_GTYPEMASK) == GTYP_STRGADGET)
  173.                             ActiveGadget = Gadget;
  174.                     }
  175.  
  176.                     if(Class == IDCMP_ACTIVEWINDOW && ActiveGadget)
  177.                         ActivateGadget(ActiveGadget,PanelWindow,NULL);
  178.  
  179.                     if(Class == IDCMP_CLOSEWINDOW)
  180.                         Terminated = TRUE;
  181.  
  182.                     if(Class == IDCMP_MOUSEMOVE)
  183.                     {
  184.                         switch(Gadget -> GadgetID)
  185.                         {
  186.                             case GAD_MONTH:    TimeDate -> Month = Code;
  187.                                     break;
  188.  
  189.                             case GAD_DAY:    TimeDate -> Day = Code;
  190.                                     break;
  191.                         }
  192.                     }
  193.  
  194.                     if(Class == IDCMP_GADGETUP)
  195.                     {
  196.                         switch(Gadget -> GadgetID)
  197.                         {
  198.                             case GAD_MONTH:    TimeDate -> Month = Code;
  199.  
  200.                                     if(TimeDate -> Day > MaxDays[TimeDate -> Month])
  201.                                     {
  202.                                         GT_SetGadgetAttrs(GadgetArray[GAD_DAY],PanelWindow,NULL,
  203.                                             GTSL_Level,    TimeDate -> Day = MaxDays[TimeDate -> Month],
  204.                                         TAG_DONE);
  205.                                     }
  206.  
  207.                                     break;
  208.  
  209.                             case GAD_DAY:    if(Code > MaxDays[TimeDate -> Month])
  210.                                     {
  211.                                         Code = MaxDays[TimeDate -> Month];
  212.  
  213.                                         GT_SetGadgetAttrs(GadgetArray[GAD_DAY],PanelWindow,NULL,
  214.                                             GTSL_Level,    Code,
  215.                                         TAG_DONE);
  216.                                     }
  217.  
  218.                                     TimeDate -> Day = Code;
  219.                                     break;
  220.  
  221.                             case GAD_USE:    strcpy(TimeDate -> Comment,GT_STRING(GadgetArray[GAD_COMMENT]));
  222.  
  223.                                     Terminated = TRUE;
  224.  
  225.                                     Result = TRUE;
  226.  
  227.                                     break;
  228.  
  229.                             case GAD_CANCEL:*TimeDate = LocalTimeDate;
  230.  
  231.                                     Terminated = TRUE;
  232.  
  233.                                     break;
  234.  
  235.                             default:    break;
  236.                         }
  237.                     }
  238.                 }
  239.             }
  240.  
  241.             RemoveGList(PanelWindow,GadgetList,(UWORD)-1);
  242.  
  243.             PopWindow();
  244.  
  245.             CloseWindow(PanelWindow);
  246.         }
  247.  
  248.         FreeGadgets(GadgetList);
  249.     }
  250.  
  251.     return(Result);
  252. }
  253.